﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _InformaticaIndustrial_DerivdosVinicos.DTO;
using Dao.Intermediarios;
using Dao;

namespace _InformaticaIndustrial_DerivdosVinicos.Interfaz
{
    public partial class ModificarOC : Form
    {
        OrdenCompra oc = new OrdenCompra();
        IPOrdenCompra ipOC = new IPOrdenCompra();
        IPDetalleOC ipDet = new IPDetalleOC();
        string nvoEstado;
       
        public ModificarOC(OrdenCompra orden)
        {
            try
            {
                InitializeComponent();
                cargarComboEstados();
                oc = orden;
                txtNroOC.Text = oc.nroOrdenCompra.ToString();
                oc.estado = nvoEstado;
                btGuardar.Enabled = true;
            }
            catch (Exception e1) 
            {
                MessageBox.Show("Se ha producido el siguiente error " + e1.Message);
            }
        }
        public void cargarComboEstados()
        {
          
        }

        private void btSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cbEstados_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }

        private void btGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                nvoEstado = cbEstados.SelectedItem.ToString();
                
                if (nvoEstado == "Completada")
                {
                    //actualizar el inventario
                    //BUSCAR LA MATERIA PRIMA DE LA ORDEN DE COMPRA Y AUMENTAR SU CANTIDAD

                    //buscar los detalles de la ord compra
                    //por cada detalla, , verificar el insumo
                    //incrementar su cantidad(stock)

                    oc.estado = "Completada";
                    IList<DetalleOrdenCompra> detalles= ipDet.getCriterioById<DetalleOrdenCompra>("", "", Convert.ToInt16(oc.idOC));
                    IPMateriaPrima ipMP = new IPMateriaPrima();
                    IPComponente ipComp = new IPComponente();
                    MateriaPrima materia = new MateriaPrima();
                    Componente compo = new Componente();
                    double can, sum;

                    foreach (var d in detalles) 
                    {
                        if (d.IdMateriaPrima != null)
                        {
                            materia = ipMP.getByCriterio<MateriaPrima>("", "", d.IdMateriaPrima.ToString()).First<MateriaPrima>();
                            sum = Convert.ToDouble(materia.cantidad);
                            can = Convert.ToDouble(sum + d.cantidad);
                            materia.cantidad = can;
                        }
                        else if (d.IdComponente != null)
                        {
                            compo = ipComp.getByCriterio<Componente>("", "", d.IdComponente.ToString()).First<Componente>();
                            sum = Convert.ToDouble(compo.cantidad);
                            can = Convert.ToDouble(sum + d.cantidad);
                            compo.cantidad = Convert.ToInt16(can);
                        }
                            
                    }
                    
                    Intermediario.confirmarCambios();
                    MessageBox.Show("La orden de compra Nº: " + oc.nroOrdenCompra + " ha sido completada.");
                    btGuardar.Enabled = false;

                }
                else 
                {
                    oc.estado = "Cancelada";
                    Intermediario.confirmarCambios();
                    MessageBox.Show("La orden de compra  Nº: " + oc.nroOrdenCompra + " ha sido cancelada.");
                    btGuardar.Enabled = false;
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show("Se ha producido el siguiente error en ModOC: " + ee.Message);
            }
        }
    }
}
